$(function () {

    /* treeview -> 全选按钮 */
    $("#select-all").click(function(){
        if($(this).is(':checked')==true){
            $(".checkbox").prop("checked", true);
        }else{
            $(".checkbox").prop("checked", false);
        }
    });

    /* treeview -> 点击checkbox所在th时，阻止冒泡 */
    $(".checkbox-cell").click(function(){
        event.stopPropagation();
    });

    /* treeview -> 点击checkbox时，阻止冒泡 */
    $(".checkbox").click(function(event){
        event.stopPropagation();
    });

    /* treeview -> 点击信息行，进入某一行的formview页面 */
    $(".charge-info").click(function(){
        var context = fn_GetContext();
        context.id = $(this).attr("data-id"); //重新设置id的值
        context.field = $("select[name=field]").val();
        context.offset = $(this).attr("offset");
        var url = "?";
        for(var k in context){
            url += k + "=" + context[k] + "&";
        }
        location.href = '/admin/charge/detail' + url;
    });

    /* treeview -> 表头字段进行排序 */
    $(".list-header").click(function(){
        var field = $(this).attr("field");
        var sort = $(this).attr("sort");
        sort = (sort=="asc"?"desc":"asc");
        $("input[name=order_field]").val(field);
        $("input[name=order_sort]").val(sort);
        $(".search-form").submit();
    });

    $("select[name=derate_type]").change(function () {
        var total = parseFloat($("input[name=total]").val());
        var derate = parseFloat($(this).find("option:selected").attr("derate"));
        var derate_money = total * derate;
        $("input[name=total2]").val((total - derate_money).toFixed(2));
        $("input[name=derate_money]").val(derate_money.toFixed(2));
    });
});

/**
 * 全局变量 fields
 */
var fields = new Array("date1","date2","year","total","derate_type","total2","remarks");

/**********************  listview  *******************************/
/**
 * listview -> 上一页、下一页
 * @param page
 * @constructor
 */
function PageJump(page){
    $("input[name=page]").val(page);
    $(".search-form").submit();
}

/**
 * listview -> 删除信息
 */
function action_del(){
    var dataIds = new Array();
    $(".checkbox").each(function(){ //由于复选框一般选中的是多个,所以可以循环输出
        if($(this).is(":checked")){
            dataIds.push( parseInt($(this).attr("data-id")));
        }
    });
    if(dataIds.length==0){
        alert("请选择要删除的对象");
        return false;
    }
    $.ajax({
        url:"/admin/charge/ajax_del",
        data: {info:dataIds}, type:"POST", dataType:"JSON",
        success: function(data){
            if(data.status){
                fn_delRows(dataIds);
            }else{
                alert(data.info);
            }
        }
    });
}

/**
 * 辅助函数，listview，删除信息行
 * @param dataIds
 */
function fn_delRows(dataIds){
    for(var i=0; i<dataIds.length; i++){
        $("tr[data-id="+dataIds[i]+"]").remove();
    }
}


/**********************  formview  *******************************/
/**
 * formview -> 编辑
 */
function action_edit(){
    //切换界面到编辑模式
    fn_SwithMode("EDIT");

    //将type=text字段信息替换
    var html, value;
    for(var i=0; i<fields.length; i++){
        if(fields[i]=='remarks'){
            value = $("td[field="+fields[i]+"]").html(); //获取单元格中对应字段的值
            html = '<input name="'+fields[i]+'" type="text" value="'+value+'" />';
            $("td[field="+fields[i]+"]").html(html);
        }else{
            $(".charge-edit").show();
            $(".charge-read").hide();
        }
    }
}

/**
 * formview -> 保存
 */
function action_save(){
    if(fn_FormSubmitCheck()){
        var data = fn_GetFormValue();
        if(fn_IsFormUpdated(data)==false){ //表单内容没有修改
            fn_UpdateField(data);
            fn_SwithMode("READ"); //切换界面到只读模式
            return true;
        }

        $.ajax({
            url:"/admin/charge/ajax_UpdateInfoById",
            data: {id: $("input[name=id]").val(), data:data}, type:"POST", dataType:"JSON",
            success: function(result){
                if(result.status){
                    location.reload();
                    fn_UpdateField(data);
                    fn_UpdateOldField(data);
                    fn_SwithMode("READ"); //切换界面到只读模式
                }else{
                    alert(result.info);
                }
            }
        });
    }
}

/**
 * formview -> 放弃编辑
 */
function action_abort(){
    location.reload();
    for(var i=0; i<fields.length; i++){
        var oldValue = fn_GetOldValues(fields[i]);
        fn_SetValues(fields[i], oldValue);
    }
    //显示编辑按钮，隐藏保存按钮
    $(".btn-group-edit").show();
    $(".btn-group-save").hide();
}

/**
 * formview -> 上一条、下一条
 * @param dataId
 * @param offset
 * @constructor
 */
function ItemJump(dataId, offset){
    var context = fn_GetContext();
    context.id = dataId;
    context.offset = offset;
    var url = fn_JsonToUrl(context);
    location.href = '/admin/charge/detail?' + url;
}

/**
 *  formview -> 复制信息
 */
function action_copy(){
    var copy  = {action:"copy", id:$("input[name=id]").val()};
    var url = fn_JsonToUrl(copy);
    location.href = "/admin/charge/add?"+url;
}

/**
 * formview -> 删除信息
 */
function action_del2(){
    var id = $("input[name=id]").val();
    var offset = $("input[name=offset]").val();
    var context = fn_GetContext();
    $.ajax({
        url:"/admin/charge/ajax_del2",
        data: {id:id, offset:offset, value:context.value, field:context.field,
            order_field:context.order_field, order_sort:context.order_sort},
        type:"POST", dataType:"JSON",
        success: function(data){
            if(!data.status){alert(data.info);return false;}
            if(data.info==null){ //数据全部被删除，则跳转到listview
                location.href = "/admin/charge/index";
            }else{
                //todo 这里还需要将上下文信息以get方法进行传递
                alert("删除成功，页面将自动跳转到下一条记录");
                context.id = data.info;
                var url = fn_JsonToUrl(context);
                location.href = "/admin/charge/detail?"+url;
            }
        }
    });
}

/**
 *  formview -> 提交添加信息表单
 */
function submitForm(){
    if(fn_FormSubmitCheck('add')){
        $("#chargeForm").submit();
    }
}

/**
 * formview -> 切换模式（READ/EDIT）
 */
function fn_SwithMode(mode){
    if(mode=="READ"){
        //隐藏编辑按钮，显示保存按钮
        $(".btn-group-edit").show();
        $(".btn-group-save").hide();
    }else if(mode=="EDIT"){
        //隐藏编辑按钮，显示保存按钮
        $(".btn-group-edit").hide();
        $(".btn-group-save").show();
    }
}

/**
 * formview -> 修改成功后，更新前端保存的原字段值
 */
function fn_UpdateField(data){
    for(var i=0; i<fields.length; i++){
        fn_SetValues(fields[i], data[fields[i]]);
    }
}

/**
 * formview -> 修改成功后，更新前端保存的原字段值
 */
function fn_UpdateOldField(data){
    for(var i=0; i<fields.length; i++){
        $("input[name=old_"+fields[i]+"]").val(data[fields[i]]);
    }
}

/**
 * formview -> 表单提交验证
 */
function fn_GetFormValue(){
    var result = {};
    for(var i=0; i<fields.length; i++){
        if(fields[i]=='derate_type'){
            result[fields[i]] = $("select[name="+fields[i]+"]").val();
        }else{
            result[fields[i]] = $("input[name="+fields[i]+"]").val();
        }

    }
    return result;
}

/**
 * formview -> 表单提交验证
 */
function fn_FormSubmitCheck(type){
    if(type=='add'){

        if(!$("input[name=house_addr]").val()){
            alert("房源地址不能为空");
            $("input[name=house_addr]").focus();
            return false;
        }
        if(!$("input[name=community]").val()){
            alert("小区名称不能为空");
            $("input[name=community]").focus();
            return false;
        }
        if(!$("input[name=name]").val()){
            alert("姓名不能为空");
            $("input[name=name]").focus();
            return false;
        }
        if(!$("input[name=idno]").val()){
            alert("身份证不能为空");
            $("input[name=idno]").focus();
            return false;
        }
        if(!$("input[name=phone]").val()){
            alert("联系电话不能为空");
            $("input[name=phone]").focus();
            return false;
        }
        if(!$("input[name=dibaork]").val()){
            alert("低保人口不能为空");
            $("input[name=dibaork]").focus();
            return false;
        }
    }
    if(!$("input[name=year]").val()){
        alert("欠缴年份不能为空");
        $("input[name=year]").focus();
        return false;
    }
    if(!$("input[name=total]").val()){
        alert("欠绵总租金不能为空");
        $("input[name=total]").focus();
        return false;
    }
    if(isNaN($("input[name=total]").val())){
        alert("欠缴总租金不是有效的数字");
        $("input[name=total]").focus();
        return false;
    }
    if(!$("select[name=derate_type]").val()){
        alert("租金减免类型不能为空");
        $("select[name=derate_type]").focus();
        return false;
    }
    if(!$("input[name=total2]").val()){
        alert("减免后应缴金额不能为空");
        $("input[name=total2]").focus();
        return false;
    }
    if(isNaN($("input[name=total2]").val())){
        alert("减免后应缴金额不是有效的数字");
        $("input[name=total2]").focus();
        return false;
    }
    return true;
}

/**
 * 验证表单内容是否被改动，false没有改动，true改动
 * @param data
 * @returns {boolean}
 */
function fn_IsFormUpdated(data) {
    for(var i=0; i<fields.length; i++){
        var oldValue = fn_GetOldValues(fields[i]);
        if(data[fields[i]] != oldValue){
            return true;
        }
    }
    return false;
}

/**
 * 辅助函数，formview，获取旧数据的值
 * @param field
 * @returns {*|jQuery}
 */
function fn_GetOldValues(field){
    return $("input[name=old_"+field+"]").val();
}

/**
 * 辅助函数，formview，设置字段的值
 * @param field
 * @param value
 */
function fn_SetValues(field, value){
    $("td[field="+field+"]").html(value);
}

/**
 * 辅助方法，formview，将json格式化成url参数
 * @param json
 * @returns {string}
 */
function fn_JsonToUrl(json){
    var url = "";
    for(var k in json){
        url += (k + "=" + json[k] + "&");
    }
    return url;
}

/**
 * 辅助函数，formview，获取上下文信息
 * @returns {{id: (*|jQuery), field: (*|jQuery), value: (*|jQuery), page: (*|jQuery), order_field: (*|jQuery), order_sort: (*|jQuery), offset: (*|jQuery)}}
 */
function fn_GetContext(){
    return {
        id : $("input[name=id]").val(),
        field : $("input[name=field]").val(),
        value : $("input[name=value]").val(),
        type : $("input[name=type]").val(),
        page : $("input[name=page]").val(),
        order_field : $("input[name=order_field]").val(),
        order_sort : $("input[name=order_sort]").val(),
        offset : $("input[name=offset]").val(),
    }
}

/**
 * 关闭对话框
 */
function closeDialog() {
    $(".dialog").hide();
}

function showDialog(dlg) {
    var dataIds = new Array();
    $("input[name=checkbox]").each(function(){ //由于复选框一般选中的是多个,所以可以循环输出
        if($(this).is(":checked")){
            dataIds.push( $(this).attr("data-id") );
        }
    });
    if(dataIds.length==0 && $("input[name=checkbox]").length>0){
        alert("请选择操作对象");
        return false;
    }
    if(dataIds.length>1 && $("input[name=checkbox]").length>0){
        alert("请选择1个操作对象");
        return false;
    }
    if($("input[name=checkbox]").length>0){
        $("input[name=fydz]").val( $("td[field=house_addr"+dataIds[0]).html() );
        $("input[name=jnrxm]").val( $("td[field=jzr"+dataIds[0]).html() );
        $("input[name=jnje]").val( $("td[field=qfje"+dataIds[0]).html() );
        $("input[name=qfts2]").val( $("td[field=qfts"+dataIds[0]).html() );
        $("input[name=dataId]").val( dataIds[0] );
    }
    $("."+dlg).show();
}


function action_payRental(){
    if(!$("input[name=name]").val()){
        alert("缴纳人姓名不能为空");
        return false;
    }
    var dataId = $("input[name=dataId]").val();
    var data = {
        name: $("input[name=name]").val(),
        pay_date: $("input[name=pay_date]").val(),
        total: parseFloat($("input[name=final_total]").val()),
        prepay: parseFloat($("input[name=prepay]").val()),
        total2: parseFloat($("input[name=total2]").val()),
        remarks: $("textarea[name=remarks]").val(),
    };
    $.ajax({
        url:"/admin/charge/ajax_payRental",
        data: {id:dataId, data:data}, type:"POST", dataType:"JSON",
        success: function(data){
            if(data.status){
                closeDialog();
                location.href = '/admin/admin/ok?msg='+data.info;
            }else{
                alert(data.info);
            }
        }
    });
}

function action_export() {

    var dataIds = new Array();
    $(".checkbox").each(function(){ //由于复选框一般选中的是多个,所以可以循环输出
        if($(this).is(":checked")){
            dataIds.push( parseInt($(this).attr("data-id")));
        }
    });

    var context = fn_GetContext();
    context.ids = dataIds.join();
    context.field = $("select[name=field]").val();

    var url = "?";
    for(var k in context){
        url += k + "=" + context[k] + "&";
    }
    location.href = '/admin/charge/export' + url;
}

var picker = new Pikaday(
    {
        field: document.getElementsByName('date1')[0],
        firstDay: 1,
        minDate: new Date('2015/01/01'),
        maxDate: new Date('2025/12/31'),
    });
var picker = new Pikaday(
    {
        field: document.getElementsByName('date2')[0],
        firstDay: 1,
        minDate: new Date('2015/01/01'),
        maxDate: new Date('2025/12/31'),
    });


$("input[name=date1]").change(function(){
    var date1 = $("input[name=date1]").val();
    var date2 = $("input[name=date2]").val();
    if(!isDate(date1)){
        alert("租金起始日期不是有效的日期格式");
        $(this).focus();
    }
    if(date2){
        var zj = parseFloat($("input[name=zj]").val());
        var size = parseFloat($("input[name=size]").val());
        var dibaork = parseInt($("input[name=dibaork]").val());
        var zujing = calZujin(date1, date2, zj, size, dibaork);
        $("input[name=total]").val(zujing.toFixed(2));
        var derate = parseFloat($("select[name=derate_type]").find("option:selected").attr("derate"));
        var derate_money = zujing * derate;
        $("input[name=total2]").val((zujing - derate_money).toFixed(2));
        //$("input[name=total2]").val(zujing.toFixed(2));
    }
});
$("input[name=date2]").change(function(){
    if(!isDate($(this).val())){
        alert("租金结束日期不是有效的日期格式");
        $(this).focus();
    }
    var date1 = $("input[name=date1]").val();
    var date2 = $("input[name=date2]").val();
    if(date1.substr(0, 4) != date2.substr(0, 4)){
        alert("租金起始年份与结束年份只能为同一年");
        $(this).val("").focus();
        return false;
    }else{
        $("input[name=year]").val(date1.substr(0, 4));
    }
    if(!date1){
        alert('请先选择租金起始日期');
        $("input[name=date1]").focus();
        return false;
    }
    var zj = parseFloat($("input[name=zj]").val());
    var size = parseFloat($("input[name=size]").val());
    var dibaork = parseInt($("input[name=dibaork]").val());
    var zujing = calZujin(date1, date2, zj, size, dibaork);
    $("input[name=total]").val(zujing.toFixed(2));
    var derate = parseFloat($("select[name=derate_type]").find("option:selected").attr("derate"));
    var derate_money = zujing * derate;
    $("input[name=total2]").val((zujing - derate_money).toFixed(2));
    //$("input[name=total2]").val(zujing.toFixed(2));
});
function calZujin(date1, date2, zujin, size, dibaork){
    var month = dateRangeToFloat(date1, date2);
    if(month!==false){
        if(dibaork*13>=size){ //低保人口享受面积大于房屋面积，则不要出房租
            return size*1.1*month;
        }
        //13平米每人内按1.1元每平米的价格计算
        var zj = (size-dibaork*13)*zujin/size + dibaork*13*1.1;
        return zj*month;
    }
}

function dateRangeToFloat(date1, date2){
    var m1 = parseInt(date1.substr(5, 2));
    var d1 = parseInt(date1.substr(8, 2));
    var m2 = parseInt(date2.substr(5, 2));
    var d2 = parseInt(date2.substr(8, 2));
    if(m1>m2){
        alert("日期错误，开始日期不能大于结束日期");
        return false;
    }
    if(m1==m2 && d1>=d2){
        alert("日期错误，开始日期不能大于结束日期");
        return false;
    }
    if(m2-m1==0){ //同年同月的情况
        return Math.min((d2-d1+1)/30, 1);
    }else{
        return Math.min(d2/30, 1) + m2-m1 - Math.min((d1-1)/30, 1);
    }
}

function isDate(dateString){
    if(dateString.trim()=="")return true;
    var r=dateString.match(/^(\d{1,4})(\/)(\d{1,2})\2(\d{1,2})$/);
    if(r==null){
        alert("请输入格式正确的日期\n\r日期格式：yyyy/mm/dd\n\r例  如：2008/08/08\n\r");
        return false;
    }
    var d=new Date(r[1],r[3]-1,r[4]);
    var num = (d.getFullYear()==r[1]&&(d.getMonth()+1)==r[3]&&d.getDate()==r[4]);
    if(num==0){
        alert("请输入格式正确的日期\n\r日期格式：yyyy-mm-dd\n\r例  如：2008-08-08\n\r");
    }
    return (num!=0);
}


